import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router' // 这里时判断响应拦截器中跳转才引入的
// import { getTimeStamp } from '@/utils/auth'
// const Timeout = 4200 //  设置token的时间
// 创建实例
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
  timeout: 5000 // request timeout
})
// 请求拦截器
service.interceptors.request.use(
  config => {
    // config 是请求的配置信息
    // 注入token
    console.log('store.getters.token', config)

    if (store.getters.token) {
      // 如果存在token的情况下 才有比必要去检查时间戳是否超时
      // if (IsCheckTimeOut()) {
      // 如果它为true表示 过期了
      // token没用了 应为超时了
      // store.dispatch('/login') // 登录操作
      // 跳转到登录页
      const token = store.getters.token
      config.headers['Authorization'] = token
      config.headers['Content-type'] = 'application/json'

      // }
    }
    return config // 必须返回的
  },
  error => {
    // error 信息里面 response的对象
    console.log('error', error)

    if (error) {
    // 相当于10002的时候 表示 后端告示我token超时了

      router.push('/login')
    } else {
      Message.error(error.message) // 提示错误信息
    }

    return Promise.error(error)
  })

// 响应拦截器
// service.interceptors.response.use()
// 添加响应拦截器
service.interceptors.response.use(response => {
  // if (Number(response.status) === 200) {
  //   // 判断如果code为-1 权限不足提示 40001 认证失效
  //   if (response.data.detached === false) {
  //     console.log('response', response)
  //     return response
  //   } else {
  //     if (response.data.code === 200) {
  //       return response
  //     } else {
  //       return response
  //     }
  //   }
  // }
  return response
}, function(error) {
  // 请求错误时做些事
  console.log('相应拦截器', '请求错误时做些事')
  const response = error.response
  const status = response && response.status
  // 和后端约定的3种状态码会跳转登录
  if ([400, 401, 403].includes(status)) {
    if (status === 400) {
      Message({
        message: '权限不足',
        type: 'error',
        duration: 2000
      })
    } else if (status === 401) {
      Message({
        message: '登录状态过期',
        type: 'error',
        duration: 2000
      })
    }
    return router.push('/login')
  } else {
    return { code: '', msg: '很抱歉，演示系统，不允许修改' }
  }
})

// 是否超时
// 超时逻辑 (当前时间-缓存中的时间) 是否大于 时间差
// function IsCheckTimeOut() {
//   var currentTime = Date.now() // 当前时间戳
//   console.log('currentTime', currentTime)
//   var timeStamp = getTimeStamp() // 缓存时间戳
//   return (currentTime - timeStamp) / 1000 > Timeout
// }

export default service
